package status

var OkStatus Status = Status{Code: "200", Msg: "OK"}
var ErrStatus Status = Status{Code: "300", Msg: "Failed"}

type IStatus interface {
	SetStatus(code string, msg string) IStatus
	ErrMsg(msg string) IStatus
	OkMsg(msg string) IStatus
	Ok() IStatus
	IsOk() bool
	IsErr() bool
}

type Status struct {
	Code string
	Msg  string
}

func NewStatus() *Status              { return &Status{} }
func NewErrStatus(msg string) *Status { return &Status{Code: "300", Msg: msg} }
func NewStatusErr(err error, ok_msg, err_msg string) IStatus {
	return NewStatus().OkErrMsg(err, ok_msg, err_msg)
}

func (p *Status) OkErrMsg(err error, ok_msg, err_msg string) IStatus {
	if err == nil {
		return p.OkMsg(ok_msg)
	}
	return p.ErrMsg(err_msg)
}

func (p *Status) ErrMsg(msg string) IStatus { return p.SetStatus("300", msg) }
func (p *Status) OkMsg(msg string) IStatus  { return p.SetStatus("200", msg) }
func (p *Status) Ok() IStatus               { return p.SetStatus("200", "OK") }
func (p *Status) IsOk() bool                { return p.Code == "200" }
func (p *Status) IsErr() bool               { return p.Code != "200" }

func (p *Status) SetStatus(code string, msg string) IStatus {
	p.Code = code
	p.Msg = msg
	return p
}
